home *** CD-ROM | disk | FTP | other *** search
/ Turnbull China Bikeride / Turnbull China Bikeride - Disc 2.iso / STUTTGART / DEMOS / 3D_DEMO_3 / !Demo3 / c / demo32 < prev   
Text File  |  1992-02-03  |  4KB  |  167 lines

  1. /******************************************************************************
  2. *                                                                             *
  3. *    grp.c                                                                    *
  4. *                                                                             *
  5. ******************************************************************************/
  6.  
  7. #include <stdlib.h>
  8. #include <stdio.h>
  9. #include <math.h>
  10. #include <swis.h>
  11. #include <os.h>
  12. #include "GrpLib.h"
  13.  
  14. void SetMouseArea(int left, int bottom, int right, int top)
  15. {
  16.   os_regset regs;
  17.   char blk[16];
  18.   int  i=0;
  19.  
  20.   blk[i++]=(char) 1; /* define mouse co-ordinate bounding box */
  21.   blk[i++]=(char) (left   & 0xFF);  blk[i++]=(char) ((left  >>8) & 0xFF);
  22.   blk[i++]=(char) (bottom & 0xFF);  blk[i++]=(char) ((bottom>>8) & 0xFF);
  23.   blk[i++]=(char) (right  & 0xFF);  blk[i++]=(char) ((right >>8) & 0xFF);
  24.   blk[i++]=(char) (top    & 0xFF);  blk[i++]=(char) ((top   >>8) & 0xFF);
  25.  
  26.   regs.r[0]=0x15; /* define pointer and mouse parameters */
  27.   regs.r[1]=(int)blk;
  28.   os_swi(OS_Word,®s);
  29. }
  30.  
  31. void SetMousePos(int x, int y)
  32. {
  33.   os_regset regs;
  34.   char blk[16];
  35.   int  i=0;
  36.  
  37.   blk[i++]=(char) 3; /* set mouse position */
  38.   blk[i++]=(char) (x & 0xFF);  blk[i++]=(char) ((x>>8) & 0xFF);
  39.   blk[i++]=(char) (y & 0xFF);  blk[i++]=(char) ((y>>8) & 0xFF);
  40.  
  41.   regs.r[0]=0x15; /* define pointer and mouse parameters */
  42.   regs.r[1]=(int)blk;
  43.   os_swi(OS_Word,®s);
  44. }
  45.  
  46. void ReadMouse(int *x, int *y, int *b)
  47. {
  48.   os_regset regs;
  49.  
  50.   os_swi(OS_Mouse,®s);
  51.     *x=regs.r[0];
  52.     *y=regs.r[1];
  53.     *b=regs.r[2];
  54. }
  55.  
  56. int Inkey()
  57. {
  58.   os_regset regs;
  59.  
  60.   regs.r[0] = 129;  /* kb read */
  61.   regs.r[1] = 0; /* wait time low byte */
  62.   regs.r[2] = 0; /* wait time high byte */
  63.   os_swi(OS_Byte,®s);
  64.   return( (regs.r[2]==0) ? regs.r[1] : 0);
  65. }
  66.  
  67.  
  68.  
  69. int main()
  70. {
  71.   int  i;
  72.  
  73.   int  msx,msy,msbut,msorgx,msorgy;
  74.   int  kbbut;
  75.  
  76.   int  stp=6;
  77.   int  ra,rs,rt,x,y,z,v;
  78.  
  79.   char    *spr1,*spr2,*spr3;
  80.   Object  *cvx1,*cvx2,*cvx3;
  81.   Object  *sch1,*sch2,*sch3;
  82.  
  83.   Object  *ObjTab[4];
  84.  
  85.   Object  *obs;
  86.  
  87.   int     curobj;
  88.  
  89.   Envi    *envi;
  90.  
  91.  
  92.  
  93.   InitGrp();
  94.   Change2DParm(0,0,319,255);
  95.   Change3DParm(2*80,2*64,2*320);
  96.  
  97.   obs  = MakeObj("",                    NULL,0);
  98.  
  99.   cvx1 = MakeObj("<Demo3$Dir>.crayon1", CVX ,1);
  100.   cvx2 = MakeObj("<Demo3$Dir>.crayon2", CVX ,0);
  101.  
  102.   sch1 = MakeObj("<Demo3$Dir>.plane1",  SCH ,0);
  103.   sch2 = MakeObj("<Demo3$Dir>.plane2",  SCH ,1);
  104.   sch3 = MakeObj("<Demo3$Dir>.sub8",    SCH ,2);
  105.  
  106.  
  107.   ObjTab[0]=cvx1;
  108.   ObjTab[1]=sch1;
  109.   ObjTab[2]=sch2;
  110.   ObjTab[3]=sch3;
  111.  
  112.   PlaceObj(obs,0,0,0,0,0,-2000);
  113.  
  114.   for (i=0;i<4;i++) PlaceObj(ObjTab[i],0,0,0,0,0,0);
  115.  
  116.   envi = MakeEnvi(1, 0, 0x50);
  117.   MkVec4(envi->DirecSrc[0],   128,   128,   128,      0);
  118.   MkVec4(envi->PonctSrc[0],     0,     200,  0, 100000);
  119.  
  120.  
  121.  
  122.   SetMouseArea(0,0,1279,1023);
  123.   SetMousePos(640,512);
  124.   ReadMouse(&msorgx,&msorgy,&msbut);
  125.  
  126.   v=0;
  127.   curobj=2;
  128.  
  129.   while (1==1) {
  130.  
  131.     PlotObj(envi,obs,ObjTab[curobj]);
  132.  
  133.  
  134.     ReadMouse(&msx,&msy,&msbut);
  135.     msx-=msorgx;
  136.     msy-=msorgy;
  137.  
  138.     kbbut = Inkey();
  139.  
  140.     ReadObjCoord(ObjTab[curobj], &ra,&rs,&rt, &x,&y,&z);
  141.  
  142.     rt += (msx*stp);
  143.     rs += (msy*stp); 
  144.     if (msbut==0x01<<2) ra+=stp;
  145.     if (msbut==0x01<<0) ra-=stp;
  146.     switch (kbbut) {
  147.      case '+'     : v+=5; break;
  148.      case '-'     : v-=5; break;
  149.      case 'S' : v =0;ra=0;rs=0;rt=0;
  150.     }
  151.  
  152.     /*PlaceObj(ObjTab[curobj], ra,rs,rt, x,y,z); */
  153.     MoveObj(ObjTab[curobj], ra,rs/256,rt/64, v);
  154.  
  155.     switch (kbbut) {
  156.      case '1': curobj=0;break;
  157.      case '2': curobj=1; break;
  158.      case '3': curobj=2; break;
  159.      case '4': curobj=3; break;
  160.      case ' ': return(0);
  161.     }
  162.  
  163.     SwapView(0x80808080);
  164.   }
  165.  
  166. }
  167.